package com.keyue.controller;

import com.keyue.common.annotation.AnonymousAccess;
import com.keyue.common.constant.ServerResult;
import com.keyue.common.utils.ImgCaptchaUtils;
import com.keyue.common.utils.SmsUtils;
import com.keyue.domain.vo.CaptchaMessageVO;
import com.wf.captcha.ArithmeticCaptcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * (Member)验证码
 *
 * @author makejava
 * @since 2023-08-22 17:02:39
 */
@RestController
@Api(tags = "验证码")
@RequestMapping("/keyue/admin/captcha")
public class CaptchaController {

    @Resource
    private SmsUtils smsUtils;

    @Resource
    private ImgCaptchaUtils imgCaptchaUtils;

    /**
     * 获取验证码
     *
     * @param msgVo 查询条件
     * @return 查询结果
     */
    @AnonymousAccess
    @ApiOperation("获取验证码")
    @PostMapping("/send_captcha_code")
    public ServerResult sendCaptchaCode(@RequestBody @Validated CaptchaMessageVO msgVo) {
        return smsUtils.sendCaptchaCode(msgVo);
    }

    /**
     * 获取图片验证码
     *
     * @return 查询结果
     */
    @AnonymousAccess
    @ApiOperation("获取图片验证码")
    @PostMapping("/get_img_captcha_code")
    public ServerResult getImgCaptchaCode() {
        // 算术类型 https://gitee.com/whvse/EasyCaptcha
        ArithmeticCaptcha captcha = new ArithmeticCaptcha(111, 36);
        // 几位数运算，默认是两位
        captcha.setLen(2);
        // 获取运算的结果
        String result = captcha.text();
        String uuid = imgCaptchaUtils.setImgCaptcha4uuid(result);
        // 验证码信息
        Map<String, Object> imgResult = new HashMap<String, Object>(2) {{
            put("img", captcha.toBase64());
            put("uuid", uuid);
        }};
        return ServerResult.success(imgResult);
    }
}

